package com.desksoft.ecommerce.util.remoteio;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/***************************************
 * <pre>
 * 版权所有：杭州迪科软件 保留所有权利
 * 创建日期: Jun 28, 2011 4:49:34 PM
 * 创建作者：luoy
 * 文件名称：远程文件IO工具类父类
 * 版本：
 * 功能：
 * 最后修改时间：Jun 28, 2011 4:49:34 PM
 * 修改记录：
 * </pre>
 *****************************************/
public abstract class RemoteIOUtil {

	protected String host;			// 远程主机名
	protected String rootDir;		// 根目录
	protected RemoteIOSetting settings;
	
	/**
	 * 初始化方法
	 */
	public abstract void initRemote();
	
	/**
	 * 设置
	 * @param settings
	 */
	public void setIOSettings(RemoteIOSetting settings) {
		setHost(settings.getHost());
		setRootDir(settings.getRootDir());
		
		this.settings = settings;
	};
	
	/**
	 * 获取输入流
	 * @param path			远程文件路径 rootDir以后的路径 
	 * @return
	 * @throws IOException
	 */
	public abstract InputStream getInputStream(String path) throws IOException;
	
	/**
	 * 获取输出流
	 * @param path			远程文件路径 rootDir以后的路径 
	 * @return
	 * @throws IOException
	 */
	public abstract OutputStream getOutputStream(String path) throws IOException;
	
	/**
	 * 判断远程文件是否存在
	 * @param path			远程文件路径 rootDir以后的路径 
	 * @return	true		存在
	 * @return	false 		不存在
	 */
	public abstract boolean exists(String path);
	
	/**
	 * 浏览目录内容
	 * @param	path		远程文件夹rootDir以后的路径			
	 * @return
	 */
	public abstract String[] browerDir(String path) throws IOException;
	
	/**
	 * 创建远程目录
	 * @param	path		远程文件夹rootDir以后的路径
	 * @return
	 */
	public abstract String mkDir(String path) throws IOException;
	
	/**
	 * 删除远程文件 (包括非空目录)
	 * @param	path		远程文件夹rootDir以后的路径
	 * @return	成功与否
	 */
	public abstract boolean delPath(String path) throws IOException;
	
	/**
	 * 关闭连接
	 */
	public abstract void disconnect();
	
	/**
	 * 设置远程文件权限
	 * @param	path	需要赋权限的远程目录或文件路径
	 * @param	power	需要赋的权限[read, write, execute]
	 * 例如：
	 * 			setPower("/usr/dir", "read ,write ,execute");
	 * @throws IOException 
	 */
	public void setPower(String path, String power) throws IOException{
		if (power.indexOf("read") > 0){
			Runtime.getRuntime().exec("chmod +r " + this.rootDir + path);
		}
		if (power.indexOf("write") > 0){
			Runtime.getRuntime().exec("chmod +w " + this.rootDir + path);
		}
		if (power.indexOf("execute") > 0){
			Runtime.getRuntime().exec("chmod +x " + this.rootDir + path);
		}
	}

	public String getHost() {
		return host;
	}

	public void setHost(String host) {
		this.host = host;
	}

	public String getRootDir() {
		return rootDir;
	}

	public void setRootDir(String rootDir) {
		this.rootDir = rootDir;
	}
	
}
